# !/usr/bin/env python
# -*- coding: utf-8 -*-
# @File  : KMeans的API初步简单使用.py
# @Author: dongguangwen
# @Date  : 2025-02-15 11:46
# 0.导包
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import calinski_harabasz_score, silhouette_score


# 1.构建数据集
# 创建数据集 1000个样本,每个样本2个特征 4个质心蔟数据标准差[0.4, 0.2, 0.2, 0.2]  簇中心在[-1,-1], [0,0],[1,1], [2,2]
x, y = make_blobs(n_samples=1000, n_features=2, centers=[[-1, -1], [4, 4], [8, 8], [2, 2]], cluster_std=[0.4, 0.2, 0.3, 0.2], random_state=22)

# # 数据集可视化
# plt.figure()
# plt.scatter(x[:, 0], x[:, 1], marker='o')
# plt.show()

# 2.模型训练预测   使用k-means进行聚类, 并使用CH方法评估
model = KMeans(n_clusters=4, random_state=22)
y_pred = model.fit_predict(x)

plt.figure()
plt.scatter(x[:, 0], x[:, 1], c=y_pred)
plt.show()

# 3.评估  用Calinski-Harabasz Index评估的聚类分数
print(silhouette_score(x, y_pred))  # 0.8704212252400464
